Skip to content

chore(release): 0.4.0#279

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main
Open

chore(release): 0.4.0#279
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown

The next claudecode.nvim release. Merging this PR creates the release tag and GitHub Release, then starts Communique GitHub Release note generation.

[0.4.0] - 2026-06-23

Added

  • :ClaudeCodeSendText {text} command and require("claudecode.terminal").send_to_terminal(text, opts) to send arbitrary text to the open Claude terminal as if typed at the prompt (submitting by default; :ClaudeCodeSendText! inserts without submitting). Multi-line text is sent via bracketed paste. Works with the in-editor native/snacks providers only. (#272, #197)
  • :checkhealth claudecode health check that verifies Neovim version, setup(), the Claude CLI, the terminal provider, the WebSocket server, the lock file, and live client connection. (#275)
  • :ClaudeCodeCloseAllDiffs command to close all pending Claude diffs at once; already-accepted-but-unwritten diffs are left intact so saved edits are never discarded. (#261, #248)
  • diff_opts.layout = "unified": a VS Code-style unified diff rendered in a single buffer with interleaved deleted (red/strikethrough) and added (green) lines, as a compact alternative to "vertical"/"horizontal". Requires Neovim >= 0.9.0; ClaudeCodeInlineDiffAdd/Delete/AddSign/DeleteSign highlight groups are customizable. (#195, #295)
  • terminal.auto_insert option (default true) controlling whether the Claude terminal auto-enters insert/terminal mode on focus; set auto_insert = false to preserve your Normal-mode scroll position. Applies to the native/snacks providers and the new-tab diff terminal. (#233)
  • terminal.diff_split_width_percentage (optional terminal width while a diff is open), diff_opts.auto_resize_terminal (default true; set false to own the layout), and User autocmds ClaudeCodeDiffOpened/ClaudeCodeDiffClosed carrying data payloads. (#270)
  • User ClaudeCodeSendComplete autocmd, fired once per file when a send is accepted while Claude is connected, with data = { file_path, start_line, end_line, context } (0-indexed lines). Lets you focus a Claude session running outside Neovim (provider = "none"/"external"). (#265, #228)
  • netrw file-selection support: <leader>as in netrw buffers adds marked or cursor files to Claude's context. (#62)
  • snacks.nvim picker support for :ClaudeCodeTreeAdd/:ClaudeCodeSend: with a snacks picker list focused, the selected/highlighted file(s) are added to Claude's context. (#269, #192)
  • Modernized model picker with evergreen labels (Claude Opus (Latest), Claude Sonnet (Latest), Claude Haiku (Latest)), 1M-context variants (opus[1m]/sonnet[1m]), and Default (account recommended). (#256)

Fixed

  • Auth token for the IDE lock file is now generated from a CSPRNG (128-bit hex) and the lock file is written atomically with 0600 permissions in a 0700 directory (previously world-readable 0644); handshake auth comparison is constant-time. (#259)
  • The WebSocket server now closes connections on malformed frames (with the correct RFC 6455 close code) instead of stalling forever on un-drainable buffers. (#258)
  • Parallel Neovim instances no longer fail to start with EADDRINUSE: port selection is re-seeded per process and the server retries the next candidate port on bind/listen failure. (#284, #283)
  • closeAllDiffTabs is now scoped to claudecode's own diffs and no longer destroys an open diffview.nvim, fugitive, or native :diffsplit review; openFile/openDiff no longer reuse a window that is in diff mode. (#290, #277)
  • The Claude terminal now excludes loopback hosts (localhost, 127.0.0.1, ::1) from no_proxy/NO_PROXY, so a configured proxy no longer tunnels Claude's ws://127.0.0.1 IDE connection and times out @ mentions. (#268, #70)
  • Rejecting a Claude diff with :q/:close/<C-w>c/closing the tab now resolves it as rejected via a new WinClosed autocmd. (#266)
  • Quickly-made visual selections are now pushed to Claude reliably: selections are flushed synchronously on visual-mode exit and persist until the cursor moves, fixing single-line selections that previously never reached Claude (especially in the /ide external flow). (#267, #246)
  • Diffs opened via openDiff are now auto-closed when the client that opened them disconnects or the integration stops, instead of lingering forever. (#261, #248)
  • Diffs now open when the Claude terminal is the only window, by creating a split instead of failing with "No suitable editor window found". (#260)
  • Fixed the "climbing cursor" in the Snacks terminal on hide/show toggle by parking floats via nvim_win_set_config({hide=...}) and recreating splits like the native provider (float fix requires Neovim >= 0.10). (#271)
  • Worked around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes into the terminal, via a version-gated vim.paste shim controlled by terminal.fix_streamed_paste ("auto" by default; no-op on Neovim >= 0.12.2). (#252)
  • Prevented a segfault (exit 139) when accepting a new-file diff with render-markdown.nvim installed, by calling diffoff before Neovim's post-write redraw. (#224)
  • Legacy diff_opts.vertical_split/open_in_current_tab options now apply correctly (they were silently ignored due to merge order). (#142)
  • Detect system sleep/wake and reset keepalive timestamps so clients aren't falsely disconnected after a laptop wakes. (#141)
  • IDE diagnostics now work when the tool is called with a bare file path instead of a file:// URI. (#163)
  • getDiagnostics returns grouped URI-based payloads with editor-native ranges and severity names; the unsupported resources capability is no longer advertised; background file opens preserve focus and serialize JSON compactly. (#274)
  • Selection context is now also sent on BufEnter, so switching buffers without moving the cursor updates Claude. (#159)
  • Selection-context fallback for third-party (provider = "none") terminals now matches by substring, since Neovim rewrites buffer names to paths/URLs. (#160)
  • ClaudeCodeSend now classifies tree/explorer buffers by filetype only, so ordinary files whose path contains neo-tree/NvimTree are no longer misrouted. (#292, #289)
  • Handle $ in file paths for :ClaudeCodeAdd and the openFile tool. (#286)
  • Snacks Explorer and snacks picker windows are no longer mistaken for the main editor window when opening diffs, preventing corrupted explorer layouts. (#255, #165)
  • Fixed a Snacks launch failure caused by shell-glob interpretation of model aliases like opus[1m]; the command is now passed as an argv list with no shell. (#256)
  • keep_terminal_focus now works for floating Claude terminals (e.g. Snacks position="float"). (#178)
  • Plugin-created diff splits are now closed deterministically on cleanup, and a stranded empty tab is closed if open_in_new_tab diff setup errors. (#175, #264)
  • An empty scratch buffer left over when the terminal provider is none is now wiped on diff open. (#223)
  • Updated Haiku to the 4.5 model version. (#146)

Changed


Maintained by the release-please workflow. CHANGELOG.md and the release PR body are regenerated by Communique on every push to main, so manual edits to this PR are overwritten.

@github-actions github-actions Bot force-pushed the release-please--branches--main branch from 1319d40 to 7c1f13e Compare June 23, 2026 10:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants